home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / coding / dsp / c5xug.exe / FRAC_DIV.ASM < prev    next >
Encoding:
Assembly Source File  |  1991-02-21  |  1.8 KB  |  57 lines

  1. ;**************************************************************
  2. ;  
  3. ;                 frac_div.asm
  4. ;  
  5. ;                 staff
  6. ;  
  7. ;                 02-21-91
  8. ;  
  9. ;           (C) Texas Instruments Inc., 1992 
  10. ;  
  11. ;           Refer to the file 'license.txt' included with this 
  12. ;           this package for usage and license information. 
  13. ;  
  14. ;**************************************************************
  15. *
  16. * This routine implements fractional division using the SUBC instruction.  For
  17. * this division routine, the absolute value of the denominator must be
  18. * greater than the absolute value of the numerator.  In addition, the
  19. * calling routine must check to verify that the divisor does not equal 0.
  20. *
  21. * The 16-bit dividend is placed in the high accumulator, and the low accumulator
  22. * is zeroed.  The divisor is in data memory.
  23. *
  24. DENOM       .set    60h
  25. NUMERA       .set    61h
  26. QUOT       .set    62h
  27. REM       .set    63h
  28. TEMSGN       .set    64h
  29. *
  30. FRACDIV    LDP       #0
  31.        LT       NUMERA      ; Determine sign of quotient.
  32.        MPY       DENOM
  33.            SPH     TEMSGN
  34.        LACL    DENOM
  35.        ABS               ; Make denominator and numerator positive.
  36.        SACL    DENOM
  37.        LACC    NUMERA,16   ; Load high accumulator, zero low accumulator.
  38.        ABS
  39. *
  40. * If divisor and dividend are aligned, division can start here.
  41. *
  42.        RPT       #15           ; 16 cycle division. Low accumulator contains
  43.        SUBC    DENOM       ; the quotient and high accumulator contains the
  44.                    ; remainder at the end of the loop.
  45. *
  46.        BIT       TEMSGN,0    ; Test sign of quotient.
  47.        RETCD   NTC           ; Return if sign positive, else continue.
  48.        SACL    QUOT        ; Store quotient and remainder during delayed
  49.        SACH    REM           ; branch.
  50. *
  51.  
  52.        LACL    #0           ; If sign negative, negate quotient.
  53.        RETD
  54.            SUB     QUOT
  55.        SACL    QUOT
  56.  
  57.